package jdklearning.concurrent.thread;


import java.util.stream.IntStream;

/**
 * @author shenenlu 2021年02月08日 下午14:54:55
 *当所有用户线程都执行完，只存在守护线程在运行时，JVM 就退出。
 *
 * 在此示例中，我使用了守护程序线程来声明1到100,000之间的范围，并对其进行迭代，然后进行打印。
 * 但是请记住，如果非守护程序的主线程先完成，则守护程序线程将无法完成执行。
 *
 * 输出将如下进行：
 *
 * 在主线程中开始执行。
 * 打印数字，范围从1到100,000。
 * 主线程中的执行结束，很有可能在迭代到100,000完成之前。
 * 最终输出将取决于您的JVM实现。
 *
 * 这就引出了我的下一个观点：线程是不可预测的。
 *
 */
public class DaemonAndNonDaemonThread {

    public static void main(String... nonDaemonAndDaemon) throws                        InterruptedException {
        System.out.println("Starting the execution in the Thread " +      Thread.currentThread().getName());

        Thread daemonThread = new Thread(() -> IntStream.rangeClosed(1, 100000)
                .forEach(System.out::println));

        daemonThread.setDaemon(true);
        daemonThread.start();

        Thread.sleep(10);

        System.out.println("End of the execution in the Thread " +
                Thread.currentThread().getName());
    }

}
